iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
自我挑戰組

go go let's go - golang 從0開始系列 第 21

Golang 轉生到web世界 - gin路由

  • 分享至 

  • xImage
  •  

Golang

Gin路由

Gin本身是支援restful的,所以可以看一下github所寫的範例,使用route.就可以直接使用各種HTTP的方式囉!

func main() {
	// Creates a gin router with default middleware:
	// logger and recovery (crash-free) middleware
	router := gin.Default()

	router.GET("/someGet", getting)
	router.POST("/somePost", posting)
	router.PUT("/somePut", putting)
	router.DELETE("/someDelete", deleting)
	router.PATCH("/somePatch", patching)
	router.HEAD("/someHead", head)
	router.OPTIONS("/someOptions", options)

	// By default it serves on :8080 unless a
	// PORT environment variable was defined.
	// router.Run()
	// router.Run(":8000") 
}

簡單說明一下restful,restful是一種規範或者風格,並非一種技術或者程式語言,所以嚴格來說不使用不遵守也不會怎樣,但為什麼需要他就稍微簡短的說明。

常見的Http Method有以下

  • GET:取得資料。
  • POST:新增一筆資料。
  • PUT:更新一筆資料。
  • DELETE:資料刪除。

RESTful:
在傳統API上,我們可能會看到這樣的function name 或者API name

新增使用者: /postUser
查所有帳號: /getUsers
查詢使用者: /getUser
修改使用者: /updateUser
刪除使用者: /delUser

那如果對方是使用RESTful的話

新增使用者:POST /user
查所有帳號:GET /users
查詢使用者:GET /user/1
修改使用者:PUT /user/1
刪除使用者:DELETE /user/1

從這裡可以看出,RESTful希望操作資料的行為以http method作為依據,所以雙方都可以從http method就可以知道這資料的操作行為是什麼了,以減少傳統在命名方式上,需要心有靈犀一點通的默契。

所以這時候我們回推一下,一開始的範例,如果是RESTful風格的話,理論上你的route每一個地都只會對資料做某件事情唷!例如GET就不應該會更新資料才是。

當然RESTful有幾個基本的定義啦!這部分就給有興趣的朋友自行餵狗了。

那繼續來看一下gin的route

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {

	router := gin.Default()

	router.GET("/user/:name", func(c *gin.Context) {
		name := c.Param("name")
		c.String(http.StatusOK, "Hello %s", name)
	})
	router.Run(":8000")
}

這時候輸入看看http://localhost:8000/user/Tom
從程式碼可以猜出:name就是對應c.Param("name")

當然我們也可以改成

	router.GET("/user/:name/:age", func(c *gin.Context) {
		name := c.Param("name")
		age := c.Param("age")
		c.String(http.StatusOK, "Hello %s", name)
		c.String(http.StatusOK, "age %s", age)
	})

參考資料
https://github.com/gin-gonic/gin


上一篇
Golang 轉生到web世界 - gin新手村
下一篇
Golang 轉生到web世界 - Gin HTML渲染
系列文
go go let's go - golang 從0開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言